// 登录和注册需要的people类
var User = require('../models/user');
var crypto = require('crypto');
var Post = require('../models/post');
// 引入留言所需要的comment类
var Comment = require('../models/comment')
// 引入multer插件
var multer  = require('multer');
// 插件的配置信息
var storage = multer.diskStorage({
  // 这个是上传图片的地址
  destination: function (req, file, cb){  //cb：callback
    cb(null, './public/images')
  },
  // 上传到服务器上的名字
  filename: function (req, file, cb){
    cb(null, file.originalname)
  }
});
var upload = multer({
  storage: storage
});


module.exports = function (app) {
  // 首页
  app.get('/',function (req,res) {
    // var Docs=null;
    var page = parseInt(req.query.p) || 1;
    Post.getTen(null,page,function (err,posts,total) {
      if (err){
        posts = [];
      }
      // Docs = docs;
      res.render('index',{
        // 所有的文章
        post: posts,
        title:'首页',
        page:page,
        total:total,
        user:req.session.user,
        isFirstPage: (page - 1) == 0,
        isLastPage: (page - 1) * 10 + posts.length == total,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })


  })

  // 权限问题：
  // 1.用户未登录情况下，不能访问/post /logout
  // 2.用户在登录的情况下，不能访问/login /reg
  function checkLogin(req,res,next) {
    if(!req.session.user){
      req.flash('error','未登录');
      return res.redirect('/login');
    }
    next()
  }
  function checkNotLogin(req,res,next) {
    if(req.session.user){
      req.flash('success','已登录');
      return res.redirect('back');//返回之前的页面
    }
    next()
  }




  // 注册页面
  app.get('/reg',checkNotLogin);
  app.get('/reg',function (req,res) {
    res.render('reg',{
      title:'注册',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  })
  // 注册行为
  app.post('/reg', checkNotLogin);
  app.post('/reg',function (req,res) {
    // 1.收集用户的注册信息
    // 2.将用户信息传入User类中，new实例化一个
    // 3.调用User.save方法,将数据存放到users集合中去
    // 4.跳转到登录页面完成
    // 5.可以给用户一个提示
    // 1.接收数据
    var name = req.body.name;
    var password = req.body.password;
    var password_re = req.body['password-repeat'];
    var email = req.body.email;

    if(name == '' || password == '' || password_re ==''|| email==''){
      req.flash('error','请正确填写信息');
      return res.redirect('/reg');
    }
    // 首先检验两次密码是否一样
    if(password != password_re){
      // 先保存一下当前错误信息
      req.flash('error','用户两次输入密码不一致')
      return res.redirect('/reg');  //跳转
    }
    // 2.对密码进行加密处理
    var md5 = crypto.createHash('md5');
    var password = md5.update(req.body.password).digest('hex');
    // console.log(password);
    // 3.开始实例化user对象
    var newUser = new User({name:name,password:password, email:email});
    // 4.检查用户名是否存在
    User.get(newUser.name,function (err,user) {
      if(err){
        req.flash('error',err);
        return res.redirect('/');
      }
      // 如果存在重复的用户名
      if(user){
        req.flash('error','用户名已经存在');
        return res.redirect('/reg')
      }
      newUser.save(function (err,user) {
        if(err){
          req.flash('error',err)
        }
        // 用户信息存入session
        req.session.user = newUser;
        req.flash('success','注册成功');
        res.redirect('/');
      })
    })
  })
  // 登录
  app.get('/login',checkNotLogin);
  app.get('/login',function (req,res) {
    res.render('login',{
      title:'登录',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  })
  // 登录行为
  app.post('/login',function (req,res) {
    // 1.检查用户名有没有
    // 2.检查密码对不对
    // 3.存储到session中用户的登录信息
    // 跳转到首页

    //用户名
    var name = req.body.name;
    var md5 = crypto.createHash('md5');
    var password = md5.update(req.body.password).digest('hex');
    // 检查用户名是否存在
    User.get(name,function (err,user) {
      if(err){
        req.flash('error',err);
        return res.redirect('/');
      }
      // 如果用户名不存在
      if(!user){
        req.flash('error','用户名不存在');
        return res.redirect('/login')
      }
      // 检查密码是否正确
      if(user.password != password) {
        req.flash('error','密码错误');
        return res.redirect('/login')
      }
        // 用户信息存入session
        req.session.user = user;
        req.flash('success','登录成功');
        res.redirect('/');

    })
  })
  // 发表
  app.get('/post',checkLogin);
  app.get('/post',function (req,res) {
    res.render('post',{
      title:'发表',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString(),
    })
  })
  // 发表行为
  app.post('/',checkLogin)
  app.post('/post',function (req,res) {
    // 当前session信息
    var currentUser = req.session.user;
    var title = req.body.title;
    var post = req.body.post;
    var tags = [req.body.tag1,req.body.tag2,req.body.tag3];
    if(title == '' || post == ''){
      req.flash('error','标题或正文不能为空');
      return res.redirect('/');
    }
    var newPost = new Post(currentUser.name,title,tags,post);
    newPost.save(function (err) {
      if(err){
        req.flash('error',err)
        return res.redirect('/')
      }
      req.flash('success','发表成功');
      res.redirect('/');
    })
    // console.log(Post.get(currentUser.name));
    // req.flash('mpost',Post.get(currentUser.name));
  })

  // 上传
  app.get('/upload',checkLogin);
  app.get('/upload',function (req,res) {
    res.render('upload',{
      title:'文件上传',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  })
  // 上传行为
  app.post('/upload',checkLogin);
  app.post('/upload',upload.array('field1',5),function (req,res) {
    req.flash('success','文件保存成功');
    res.redirect('/upload');
  })



  // 点击用户名，可以看到用户发布的所有文章
  app.get('/u/:name',function (req,res) {
    // req.params.name就可以获取到GET请求中的参数了
    // 1.检查用户名是否存在
    User.get(req.params.name,function (err,user) {
      if(!user){
        req.flash('error','用户名不存在');
        return res.redirect('/');
      }
      // 2.使用Post的getAll方法来获取用户所对应的文章
      Post.getTen(user.name,parseInt(req.query.p),function (err,posts,total) {
        if(err){
          req.flash('error','未找到用户文章');
          return res.redirect('/');
        }
        res.render('user',{
          title:user.name,
          post:posts,
          user:user,
          success:req.flash('success').toString(),
          error:req.flash('error').toString()
        })
      })
    })
  })
  // 文章详情页面
  app.get('/u/:name/:minute/:title',function (req,res) {
    Post.getOne(req.params.name,req.params.minute,req.params.title,function (err,post) {
      if(err){
        req.flash('error','文章跑哪了');
        return res.redirect('/');
      }
      res.render('article',{
        title:req.params.name,
        user:req.session.user,
        post:post,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  // 留言发布
  app.post('/comment/:name/:minute/:title',function (req,res) {
    var date= new Date();
    var time =date.getFullYear()+'-'+(date.getMonth()+1)+'-'+date.getDate()+' '+date.getHours()+':'+(date.getMinutes()<10 ? '0'+date.getMinutes()+':'+date.getSeconds():date.getMinutes()+':'+date.getSeconds())
    var comment = {
      name:req.body.name,
      time:time,
      content:req.body.content
    }
    var newComment = new Comment(req.params.name,req.params.minute,req.params.title,comment)
    newComment.save(function (err) {
      if(err){
        req.flash('error',err);
        return res.redirect('back');
      }
      req.flash('success','留言成功');
      res.redirect('back');
    })

  })
  // 文章编辑
  app.get('/edit/:name/:minute/:title',checkLogin)
  app.get('/edit/:name/:minute/:title',function (req,res) {
    var currentUser = req.session.user;
    Post.edit(currentUser.name,req.params.minute,req.params.title,function (err,post) {
      if(err){
        req.flash('error',err);
        return res.redirect('/')
      }
      res.render('edit',{
        title:'编辑文章',
        user:req.session.user,
        post:post,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  app.get('/logout',checkLogin);
  app.get('/logout',function (req,res) {
    req.session.user = null;
    req.flash('success','成功退出');
    res.redirect('/');
  })
  app.post('/edit/:name/:minute/:title',checkLogin);
  app.post('/edit/:name/:minute/:title',function (req,res) {
    Post.update(req.params.name,req.params.minute,req.params.title,req.body.post,function (err) {
      // encodeURI防止有中文的情况下，进行转义
      var url = encodeURI('/u/'+req.params.name+'/'+req.params.minute+'/'+req.params.title);
      if(err){
        req.flash('error',err);
        return res.redirect(url);
      }
      req.flash('success','编辑成功');
      return res.redirect(url);
    })
  })
  // 文章删除行为
  app.get('/remove/:name/:minute/:title',checkLogin);
  app.get('/remove/:name/:minute/:title',function (req,res) {
    Post.remove(req.params.name,req.params.minute,req.params.title,function (err) {
      if(err){
        req.flash('error',err);
        return res.redirect('back');
    }
    req.flash('success','删除成功');
      return res.redirect('/')
    })
  })
  // 存档
  app.get('/archive',function (req,res) {
    Post.getArchive(function (err,posts) {
      if(err){
        req.flash('err',err);
        return res.redirect('/');
      }
      res.render('archive',{
        title:'存档',
        posts:posts,
        user:req.session.user,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  // 标签
  app.get('/tags',function (req,res) {
    Post.getTags(function (err,posts) {
      if(err){
        req.flash('error',err);
        res.redirect('/');
      }
      res.render('tags',{
        title:'标签',
        posts:posts,
        user:req.session.user,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  app.get('/tags/:tag',function (req,res) {
    Post.getTag(req.params.tag,function (err,posts) {
      if(err){
        req.flash('error',err);
        return res.redirect('/');
      }
      res.render('tag',{
        title:'标签:'+ req.params.tag,
        user:req.session.user,
        posts:posts,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  app.get('/search',function (req,res) {
    Post.search(req.query.keyword,function (err,posts) {
      if(err){
        req.flash('error',err);
        return res.redirect('/');
      }
      res.render('search',{
        'title':'搜索'+req.query.keyword,
        'user':req.session.user,
        'posts':posts,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
};
